//grunt入口文件
// 用于定义一些需要定义grunt自动执行的任务
// 需要导出一个函数
// 此函数接收一个grunt的形参，内部提供一些创建任务时可以用到的api

/**定义任务 
 * default任务中可以依次调用他任务，通过<yarn grunt>指令直接执行
*/
// module.exports=grunt=>{
//   grunt.registerTask('foo',()=>{
//     console.log('this is a task')
//   })
//   grunt.registerTask('bar','这是一个任务描叙',()=>{
//     console.log('other task~~~')
//   })
//   grunt.registerTask('default', () => {
//     console.log('other task~~~')
//   })
//   grunt.registerTask('default', ['foo', 'bar','async'])
//   // grunt.registerTask('async',()=>{//grunt 默认是支持同步任务，要使用异步需要借助回调函数中的this.async这个方法
//   //   setTimeout(()=>{
//   //     console.log('async task working!')
//   //   },1000)
//   // })
//   grunt.registerTask('async',function(){
//     const done = this.async()
//     setTimeout(() => {
//       console.log('async task working!')
//       done()//结束当前任务的执行
//     }, 1000)
//   })
// }

/**
 * 定义失败的任务 
 * 失败的任务，之后的任务是不会执行的
*/
// module.exports=(grunt)=>{
//   grunt.registerTask('bad', () => {
//     console.log('this is a  bad task')
//     return false
//   })
//   grunt.registerTask('foo', () => {
//     console.log('this is foo task')
//   })
//   grunt.registerTask('bar', '这是一个任务描叙', () => {
//     console.log('bar task~~~')
//   })
//   grunt.registerTask('default', ['foo', 'bad', 'bar'])//Aborted due to warnings.
// }


/**
 * grunt的配置方法.initConfig
 */
// module.exports = grunt => {
//   grunt.initConfig({//定义数据
//     foo:'bar',
//     bar:{
//       msg:'a custom data'
//     }
//   })
//   grunt.registerTask('default', () => {})//需要重写default任务,否则会报错
//   grunt.registerTask('foo',()=>{
//     console.log(grunt.config('foo'))//拿到数据)
//   })
// }


/**
 * grunt的多目标任务：可以让任务根据配置形成多个子任务,
 * 在终端中是用 <yarn grunt build> 指令 最后一个单词是任务名
 */
// module.exports = (grunt) => {
//   grunt.initConfig({
//     build: {
//       options: {
//         foo: 'bar',
//       },//作为该任务的配置选项出现
//       css: '1',
//       js: '2',
//     }
//   })
//   grunt.registerMultiTask('build', function () {
//     console.log(this.options())
//     console.log(`target: ${this.target}, data:${this.data}`)
//   })
// }

/**
 * grunt插件使用
 * 使用loadNpmTasks方法加载grunt插件
 * 使用load-grunt-tasks插件加载所有插件
 */
const loadGruntTasks =require('load-grunt-tasks')
const sass = require('sass');
module.exports = (grunt) => {
  grunt.initConfig({
    clean: {
      // temp:'temp/app.js'
      temp: 'temp/**'
    },
    sass: {
      options: {
        sourceMap: true,//生成sourceMap文件
        implementation: sass
      },
      main: {
        files: { 'dist/css/main.css': 'src/scss/main.scss' }
      },
    },
    babel:{
      options: {
        presets: ['@babel/preset-env'],
        sourceMap: true
      },
      main: {
        files: { 'dist/js/main.js': 'src/js/main.js' }
      },
    },
    watch:{//启动文件监听；文件修改就会执行里面的任务,一开始并不会执行
      js:{
        files:['src/js/*.js'],
        tasks:['babel']
      },
      css:{
        files:['src/scss/*.scss'],
        tasks:['sass']
      }
    }
  })
  // grunt.loadNpmTasks('grunt-contrib-clean')//加载grunt清除文件的插件
  // grunt.loadNpmTasks('grunt-sass')
  // grunt.loadNpmTasks('grunt-babel')
  loadGruntTasks(grunt)//自动加载所有的grunt插件任务
  grunt.registerTask('default',['sass','babel','watch'])//执行默认任务就会执行watch任务
}